package com.atguigu.jxc.service.impl;

import com.atguigu.jxc.dao.GoodsTypeDao;
import com.atguigu.jxc.entity.GoodsType;
import com.atguigu.jxc.service.GoodsTypeService;
import com.google.gson.JsonArray;
import com.google.gson.JsonObject;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.Arrays;
import java.util.List;

/**
 * @author: lei
 * @Date 2021/11/25 21:02
 **/
@Service
public class GoodsTypeServiceImpl implements GoodsTypeService {

    @Autowired
    private GoodsTypeDao goodsTypeDao;
    // 查询商品所有分类
    @Override
    public JsonArray loadGoodsType(int pid) {
        JsonArray array = this.getGoodsTypeByParentId(pid);
        for (int i = 0; i < array.size(); i++) {
            JsonObject obj = (JsonObject) array.get(i);
            if (obj.get("state").getAsString().equals("open")){
                // 叶子节点，结束
                continue;
            }else{
                obj.add("children",this.loadGoodsType(obj.get("id").getAsInt()));
            }
        }
        return   array;
    }

    // 根据父分类id，获取子分类集合
    private JsonArray getGoodsTypeByParentId(int id) {

        JsonArray array = new JsonArray();
        List<GoodsType> typeList =  goodsTypeDao.getGoodsTypeByParentId(id);

        for (GoodsType goodsType : typeList) {
            JsonObject obj = new JsonObject();

            obj.addProperty("id",goodsType.getGoodsTypeId());
            obj.addProperty("text",goodsType.getGoodsTypeName());
            obj.addProperty("iconCls", "goods-type");
            if(goodsType.getGoodsTypeState() ==1){
                obj.addProperty("state","closed");
            }else{
                obj.addProperty("state","open");
            }

            JsonObject attributes =  new JsonObject();
            attributes.addProperty("state:",goodsType.getGoodsTypeState());
            obj.add("attributes",attributes);
            array.add(obj);
    }

        return array;
}


    // 保存分类
    @Transactional
    @Override
    public void save(String goodsTypeName, Integer pId) {
        // 应该查询同级id有没有，子id若有则应该state为1；但是也可能以本分类作为父id还要改state,所有应该添加的时候判断
        // 父id的状态，若为0，则改为1
        Integer state = goodsTypeDao.selectStateById(pId);
        if(state==0){
            GoodsType goodsType = new GoodsType();
            goodsType.setGoodsTypeId(pId);
            goodsType.setGoodsTypeState(1);
            goodsTypeDao.updateGoodsTypeState(goodsType);
        }

        GoodsType goodsType1 =new GoodsType();
        goodsType1.setGoodsTypeName(goodsTypeName);
        goodsType1.setPId(pId);
        goodsType1.setGoodsTypeState(0);
        goodsTypeDao.save(goodsType1);
    }

    // 先查父id,后删除(以自己为父id查询子集合，若有子集合批量删除)，后判断父id还有没有子id，若无改state为0，若有还是1
    @Override
    public void deleteById(Integer goodsTypeId) {
        goodsTypeDao.deleteById(goodsTypeId);
    }
}
